<?php
App::uses('AppController', 'Controller');
/**
 * Books Controller
 *
 * @property Book $Book
 * @property PaginatorComponent $Paginator
 */
class BooksController extends AppController {

/**
 * Components
 *
 * @var array
 */
	// элементы меню правой колонки шаблона defaultwsb
	public $SideBarItems = array();
	// сообщения выводимые в правой колонке под меню при использовании шаблона defaultwsb
	public $SideBarMessage = '';
	public $HMenu = '';
	public $VMenu = '';
	
	// id пользователя  он же id teacher  он же id author
	public $SessionUserData = '';
	
	// массив список id recordtypes соотнесенных с данной моделью
	public $RecordtypeIDS = array(100,200,300,400);
	
	
	public function beforeFilter() {
		AppController::beforeFilter();
	
		$this->set('SideBarMessage', $this->SideBarMessage);
		$this->set('HMenu', $this->HMenu);
	
		$this->SessionUserData = $this->Session->read('SessionUserData');
	
	}	

/**
 * index method
 *
 * @return void
 */
	public function index() {
		// устанавливаем активный пункт меню в верхем меню
		$this->set('HMenu', 'Record');
	}

/**
 * view method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function view($id = null) {
		/* *************************************************************************
		 *  делаем проверку что этот пользователь автор - владелец этой записи
		 *  данный код необходим во всех контроллерах где работа идет 
		 *  с конкретной запистью
		 * *************************************************************************/
		$this->loadModel('Authorlink');
		$author_id = $this->SessionUserData;
		$is_author = false;
		// тип записи в таблице authorlink
		$recordtype_id = '';
		
		// список типов записей для таблицы books
		// проверить типы записей для каждой таблицы
		$recordtypes = $this->RecordtypeIDS; //array(1,2,3,4);
		
		// ищем всех возможных авторов
		$authorlinks = $this->Authorlink->find('all', array('conditions' => array('Authorlink.recordtype_id' => $recordtypes, 'Authorlink.recordid' => $id)));
		foreach ($authorlinks as $authorlink):
			// проверка является ли пользователь владельцем данной записи
			if ($authorlink['Authorlink']['author_id'] == $author_id && $authorlink['Authorlink']['is_owner'] == 1) {
				$is_author = true;
				$recordtype_id = $authorlink['Authorlink']['recordtype_id'];
				$this->set('recordtype_id', $recordtype_id);
				break;
			}
		endforeach;
		if (!$is_author) {
			$this->Session->setFlash(__('Вы не являетесь владельцем записи к которой обращаетесь.'));
			return $this->redirect(array('controller' => 'records', 'action' => 'index'));
		}
		/* *************************************************************************
		 * конец проверки на владельца записи
		* *************************************************************************/
		
		
		// устанавливаем активный пункт меню в верхем меню	 
		$this->set('HMenu', 'Record');
		
		
		if (!$this->Book->exists($id)) {
			throw new NotFoundException(__('Invalid book'));
		}
		$options = array('conditions' => array('Book.' . $this->Book->primaryKey => $id));
		$this->set('book', $this->Book->find('first', $options));
		


		// список типов записей для таблицы books
		$recordtypes = $this->RecordtypeIDS;// $recordtypes = array(1,2,3,4);
		// ищем всех возможных авторов		
		$authorlinks = $this->Authorlink->find('all', array('conditions' => array('Authorlink.recordtype_id' => $recordtypes, 'Authorlink.recordid' => $id)));
		
		//debug ($authorlinks);
		
		// массив для всех существующих авторов
		$authors = array();
		
		//подключаем все таблицы авторов
		$this->loadModel('Teacher');
		$this->loadModel('Extauthor');
		$this->loadModel('Student');

		foreach ($authorlinks as $authorlink):
			$author = $authorlink['Author'];
			switch ($author['authortype_id']) {
				// поиск по преподавателям КГМУ
				case 1: $teacher = $this->Teacher->find('first', array('conditions' => array('Teacher.id' => $author['authorid'])));
					//debug ($teacher);
				
					$fio = 'Преподаватель КГМУ '.$teacher['Teacher']['lastname'].' '.$teacher['Teacher']['firstname'].' '.$teacher['Teacher']['surname'];
					if ($authorlink['Authorlink']['is_owner'] == 1) {
						$fio .=' Автор';
					}
					if ($authorlink['Authorlink']['is_owner'] == 0) {
						$fio .=' (Соавтор)';
					}
					if ($authorlink['Authorlink']['active'] == 0) {
						$fio .=' (не подтвердил)';
					}
					
					if (($authorlink['Authorlink']['active'] == 1) && ($authorlink['Authorlink']['is_owner'] == 0)) {
						$fio .=' (подтвердил)';
					}
					
					// для генерации ссылки на удаление связи соавтора с записью
					if ($authorlink['Authorlink']['is_owner'] == 1) {
						$tmpauthor = array('fio' => $fio, 'linkid' => '');
					} else {
						$tmpauthor = array('fio' => $fio, 'linkid' => $authorlink['Authorlink']['id']);
					}
			
					array_push($authors, $tmpauthor);
				break;
				// поиск по студентам КГМУ
				case 2: 
					$student_id = $author['authorid'];
					$student = $this->Student->find('first', array('conditions' => array('Student.id' => $student_id), 'recursive' => -1));
					$studentgroup = $this->Student->Studentgroup->find('first', array('conditions' => array('Studentgroup.id' => $student['Student']['studentgroup_id']), 'recursive' => -1));
					$course = $this->Student->Studentgroup->Course->find('first', array('conditions' => array('Course.id' => $studentgroup['Studentgroup']['course_id']), 'recursive' => -1));
					$profession =  $this->Student->Studentgroup->Course->Profession->find('first', array('conditions' => array('Profession.id' => $course['Course']['profession_id']), 'recursive' => -1));
					$fio = 'Студент КГМУ '.$student['Student']['lastname'].' '.$student['Student']['firstname'].' '.$student['Student']['surname'].' ('.$profession['Profession']['name'].' '.$course['Course']['name'].' '.$studentgroup['Studentgroup']['name'].')';
					// для генерации ссылки на удаление связи соавтора с записью
					$tmpauthor = array('fio' => $fio, 'linkid' => $authorlink['Authorlink']['id']);
					array_push($authors, $tmpauthor);
				break;
				// поиск по внешним авторам
				case 3: 
					$extauthor_id = $author['authorid'];
					$extauthor = $this->Extauthor->find('first', array('conditions' => array('Extauthor.id' => $author['authorid'])));
					//debug ($extauthor);
					$fio = $extauthor['Extauthortype']['name'].' '. $extauthor['Extauthor']['lastname'].' '.$extauthor['Extauthor']['firstname'].' '.$extauthor['Extauthor']['surname'];
					// для генерации ссылки на удаление связи соавтора с записью
					$tmpauthor = array('fio' => $fio, 'linkid' => $authorlink['Authorlink']['id']);
					array_push($authors, $tmpauthor);
				break;		
			}
		endforeach;
		
		$this->set('authors', $authors);
	}

/**
 * add method
 *
 * @return void
 */
	public function add($recordtype_id = null) {
		// устанавливаем активный пункт меню в верхем меню	 
		$this->set('HMenu', 'Record');	
		// фиксируем тип записи
		$this->set('recordtype_id', $recordtype_id);
		
		if ($this->request->is('post')) {
			$this->Book->create();
			if ($this->Book->save($this->request->data)) {
				$this->Session->setFlash(__('The book has been saved.'));
				
				$book_id = $this->Book->id;

				// организуем связь автора и запсиси соотвествующего типа
				$this->loadModel('Authorlink');
				$newlink = array('Authorlink' => array('recordtype_id' => $this->data['recordtype_id'],
														'recordid' => $book_id,
														'author_id' => $this->SessionUserData,
														'is_owner' => 1,
														'active' => 1
													));
				$this->Authorlink->create();
				$this->Authorlink->save($newlink);
				
				return $this->redirect(array('action' => 'view', $book_id));
			} else {
				$this->Session->setFlash(__('The book could not be saved. Please, try again.'));
			}
		}
		
		
		$booktypes_ids = '';
		switch ($recordtype_id){
			case 100: 	$booktypes_ids = array(1,2,3,4,5); break;
			case 200: 	$booktypes_ids = array(6,7); break;
			case 300: 	$booktypes_ids = array(8,9); break;
			case 400: 	$booktypes_ids = array(10,11); break;
		}
		

		$booktypes = $this->Book->Booktype->find('list', array('conditions' => array('Booktype.id' => $booktypes_ids)));
		
		$this->loadModel('Recordtype');
		$recordtypes = $this->Recordtype->find('list');
		
		$mediatypes = $this->Book->Mediatype->find('list');
		//$recstatuses = $this->Book->Recstatus->find('list');
		$this->set(compact('booktypes', 'mediatypes', 'recordtypes'));
	}

/**
 * edit method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function edit() {
		$id = $this->request->data['Book']['id'];

		//debug($this->request->data);
	
		if (!$this->Book->exists($id)) {
			throw new NotFoundException(__('Invalid book'));
		}

		if ($this->request->is(array('post', 'put')) && !isset($this->request->data['Book']['doedit'])) {
			if ($this->Book->save($this->request->data)) {
				//debug ('saved');
				$this->Session->setFlash(__('The book has been saved.'));
				return $this->redirect(array('action' => 'view', $id));
			} else {
				$this->Session->setFlash(__('The book could not be saved. Please, try again.'));
			}
		} else {
			//debug ($this->request->is(array('post', 'put')));
			//debug (!isset($this->request->data['Book']['doedit']));
			//debug ('not saved');
			$options = array('conditions' => array('Book.' . $this->Book->primaryKey => $id));
			$this->request->data = $this->Book->find('first', $options);
		}
		// устанавливаем активный пункт меню в верхем меню
		$this->set('HMenu', 'Record');
				
		$booktypes = $this->Book->Booktype->find('list');
		$mediatypes = $this->Book->Mediatype->find('list');
		$recstatuses = $this->Book->Recstatus->find('list');
		$this->set(compact('booktypes', 'mediatypes', 'recstatuses'));
	}

/**
 * delete method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function delete() {
		$id = $this->request->data['Book']['id'];
		$this->Book->id = $id;
		if (!$this->Book->exists()) {
			throw new NotFoundException(__('Invalid book'));
		}
		$this->request->onlyAllow('post', 'delete');
		if ($this->Book->delete()) {
			$this->Session->setFlash(__('The book has been deleted.'));
			/** начало стандартного блока **/
			$this->loadModel('Authorlink');
			$recordtypes = $this->RecordtypeIDS;
			$this->Authorlink->deleteall(array('Authorlink.recordtype_id' => $recordtypes, 'Authorlink.recordid' => $id));
			/** начало стандартного блока **/
		} else {
			$this->Session->setFlash(__('The book could not be deleted. Please, try again.'));
		}
		return $this->redirect(array('controller' => 'records', 'action' => 'index'));
	}

/**
* метод изменения статуса записи с редактирование на отправлено модератору
* в случае если у записи статут отклонена нужно ее отрадактировать (статус станет редактирование)
* затем отправить повторно
* 
*/
	public function send() {
		$id = $this->request->data['Book']['id'];
		$this->Book->id = $id;
		$this->Book->saveField('recstatus_id', '2');
		$this->Session->setFlash(__('Запись отправлена модератору.'));
		return $this->redirect(array('controller' => 'records', 'action' => 'index'));
	}
	
/**
 *  метод выводит view записи без возможности что то исправить
 */	
	public function simpleview($id = null) {
		// устанавливаем активный пункт меню в верхем меню
		$this->set('HMenu', 'Record');
		
		
		if (!$this->Book->exists($id)) {
			throw new NotFoundException(__('Invalid book'));
		}
		$options = array('conditions' => array('Book.' . $this->Book->primaryKey => $id));
		$this->set('book', $this->Book->find('first', $options));
		
		
		
		// список типов записей для таблицы books
		$recordtypes = $this->RecordtypeIDS;// $recordtypes = array(1,2,3,4);
		$this->loadModel('Authorlink');
		// ищем всех возможных авторов
		$authorlinks = $this->Authorlink->find('all', array('conditions' => array('Authorlink.recordtype_id' => $recordtypes, 'Authorlink.recordid' => $id)));
		
		//debug ($authorlinks);
		
		// массив для всех существующих авторов
		$authors = array();
		
		//подключаем все таблицы авторов
		$this->loadModel('Teacher');
		$this->loadModel('Extauthor');
		$this->loadModel('Student');
		
		foreach ($authorlinks as $authorlink):
		$author = $authorlink['Author'];
		switch ($author['authortype_id']) {
			// поиск по преподавателям КГМУ
			case 1: $teacher = $this->Teacher->find('first', array('conditions' => array('Teacher.id' => $author['authorid'])));
			//debug ($teacher);
		
			$fio = 'Преподаватель КГМУ '.$teacher['Teacher']['lastname'].' '.$teacher['Teacher']['firstname'].' '.$teacher['Teacher']['surname'];
			if ($authorlink['Authorlink']['is_owner'] == 1) {
				$fio .=' Автор';
			}
			if ($authorlink['Authorlink']['is_owner'] == 0) {
				$fio .=' (Соавтор)';
			}
			if ($authorlink['Authorlink']['active'] == 0) {
				$fio .=' (не подтвердил)';
			}
			if (($authorlink['Authorlink']['active'] == 1) && ($authorlink['Authorlink']['is_owner'] == 0)) {
				$fio .=' (подтвердил)';
			}			
				
			// для генерации ссылки на удаление связи соавтора с записью
			if ($authorlink['Authorlink']['is_owner'] == 1) {
				$tmpauthor = array('fio' => $fio, 'linkid' => '');
			} else {
				$tmpauthor = array('fio' => $fio, 'linkid' => $authorlink['Authorlink']['id']);
			}
				
			array_push($authors, $tmpauthor);
			break;
			// поиск по студентам КГМУ
			case 2:
				$student_id = $author['authorid'];
				$student = $this->Student->find('first', array('conditions' => array('Student.id' => $student_id), 'recursive' => -1));
				$studentgroup = $this->Student->Studentgroup->find('first', array('conditions' => array('Studentgroup.id' => $student['Student']['studentgroup_id']), 'recursive' => -1));
				$course = $this->Student->Studentgroup->Course->find('first', array('conditions' => array('Course.id' => $studentgroup['Studentgroup']['course_id']), 'recursive' => -1));
				$profession =  $this->Student->Studentgroup->Course->Profession->find('first', array('conditions' => array('Profession.id' => $course['Course']['profession_id']), 'recursive' => -1));
				$fio = 'Студент КГМУ '.$student['Student']['lastname'].' '.$student['Student']['firstname'].' '.$student['Student']['surname'].' ('.$profession['Profession']['name'].' '.$course['Course']['name'].' '.$studentgroup['Studentgroup']['name'].')';
				// для генерации ссылки на удаление связи соавтора с записью
				$tmpauthor = array('fio' => $fio, 'linkid' => $authorlink['Authorlink']['id']);
				array_push($authors, $tmpauthor);
				break;
				// поиск по внешним авторам
			case 3:
				$extauthor_id = $author['authorid'];
				$extauthor = $this->Extauthor->find('first', array('conditions' => array('Extauthor.id' => $author['authorid'])));
				//debug ($extauthor);
				$fio = $extauthor['Extauthortype']['name'].' '. $extauthor['Extauthor']['lastname'].' '.$extauthor['Extauthor']['firstname'].' '.$extauthor['Extauthor']['surname'];
				// для генерации ссылки на удаление связи соавтора с записью
				$tmpauthor = array('fio' => $fio, 'linkid' => $authorlink['Authorlink']['id']);
				array_push($authors, $tmpauthor);
				break;
		}
		endforeach;
		
		$this->set('authors', $authors);		
	}

}
